package com.webserver.core;

import com.webserver.controller.UserController;
import com.webserver.http.HttpContext;
import com.webserver.http.HttpServletRequest;
import com.webserver.http.HttpServletResponse;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
/**
 * 该类用于完成请求的处理工作
 */

public class DispatcherServlet {
    /*
    单例模式 java23中设计模式之一
    当一个类仅需要一个实例时，可使用此模式.
    三个步骤：
    1：提供静态的私有的当前类的属性
    2：私有化构造方法：
    3：提供静态公开的获取当前类实例的方法
    再放放阿忠克判断步骤1的静态属性是否为null,是,则实例化对象（仅此一次）
    否则直接返回该实例
     */

    private static DispatcherServlet obj;

    private DispatcherServlet() {
    }

    public static DispatcherServlet getInstance() {
        if (obj == null) {
            obj = new DispatcherServlet();
        }
        return obj;
    }
    public void service(HttpServletRequest request, HttpServletResponse response) {
        String path = request.getRequestURI();
        if ("/myweb/reg".equals(path)) {
        //处理用户注册
            UserController controller = new UserController();
            controller.reg(request,response);
        } else if ("/myweb/login".equals(path)){
            UserController controller = new UserController();
            controller.login(request,response);
        }else {
            //将./webapps/myweb/index.html响应给浏览器
            File file = new File("./webbapps" + path);
            if (file.isFile()) {//如果定位的是文件
                response.setEntity(file);
            /*
            1：通过file获取文件名（浏览器请求的文件的名字）
            比如：img.png
            2：根据文件名可以截取处后缀部分(String的相关方法）
            比如：png
            3：根据后缀的值设置Content-Type的值
            比如：
            response.addHeader（“Content-Type”，“image/png”）
             */
                //获取文件名
                //添加两个响应头Content - Type和Content-Length
            } else {//不是文件（要么不存在，要么是目录，404情况）
                file = new File("./webbapps/root/505.html");
                response.setStatusCode(404);
                response.setStatusReason("NotFund");
                response.setEntity(file);
            }
        }

        response.addHeader("Server", "WebServer");

    }


    public class getInstance extends DispatcherServlet {

    }
}

